package com.neuedu.corejava.ch7;
//20190805
public class Outer {
	
	private int id;
	private String name;
	

	public Outer(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	
	public void printOuter(){
		System.out.println(id+"  in outer  "+name);
		//在外部类中使用内部类
		//内部类可以直接在外部类中使用，用于完成特定功能
		Inner inner=new Inner();
		inner.printInner();
	}
	
	
//	//1.内部类
//	public class Inner{
//		private int id=101;
//		private String name="inner";
//		public void printInner(){
//			//在内部类中，可以直接使用外部类的属性和方法
//			//在内部类中，如果有变量与外部类的变量名称相同，优先使用内部类的变量
//			int innerId=id;
//			String innerNamString=name;
//			System.out.println(innerId+"  in inner  "+innerNamString);
//			printOuter();
//		}
//	}//end inner
	//2.内部类
	//内部类：在实际使用中经常被定义为私有的，只在外部中使用，用于完成某种特定功能
	private class Inner{
		private int id=101;
		private String name="inner";
		public void printInner(){
			//在内部类中，可以直接使用外部类的属性和方法
			//在内部类中，如果有变量与外部类的变量名称相同，优先使用内部类的变量
			int innerId=id;
			String innerNamString=name;
			System.out.println(innerId+"  in inner  "+innerNamString);
			printOuter();
		}
	}//end inner
	


	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//1.
		Outer outer=new Outer(1, "外部类");
		outer.printOuter();
		Outer.Inner oInner=outer.new Inner();
		oInner.printInner();
		
//		//2.在外部类中使用内部类
//		Outer outer=new Outer(1, "外部类");
//		outer.printOuter();
//		

	}

}
